home *** CD-ROM | disk | FTP | other *** search
- #ifndef THINK_C
- #include <GestaltEQU.h>
- #include <OSUtils.h>
- #include <Notification.h>
- #include <Resources.h>
- #endif
-
- #include <Traps.h>
- #include <gestaltEQU.h>
-
- #include <GestaltTalk.h>
-
-
- OSErr ShowInitIcon( short icon_num, short move_x_by);
- pascal void EndUpdateEntry(WindowPtr wp);
- long *GetStashSpotAddr();
- gtp *GetGTAddr();
-
- pascal void main()
- {
- Handle initCodeHandle;
- long *localRealAddr;
- gtp *gtPointer;
- short err = 0;
- long sysVersion;
- GestaltTalkPB gpb;
-
- /* don't load unless we are on 7.0 or later */
- err = Gestalt(gestaltSystemVersion,&sysVersion);
- if(sysVersion < 0x0700) return;
-
- initCodeHandle = Get1Resource('INIT',0);
- DetachResource(initCodeHandle);
-
- localRealAddr = GetStashSpotAddr();
-
- *localRealAddr = GetToolTrapAddress( (short)_EndUpDate );
- SetToolTrapAddress((long)EndUpdateEntry, (short)_EndUpDate);
-
- gpb.command = guserinit;
- gpb.datalength = 0;
- gpb.data = nil;
- gpb.gtData = nil;
-
- err = GestaltTalk(&gpb);
- if(err) {
- DebugStr("\pError, gestaltTalk guserinit failed.");
- *localRealAddr = 0;
- return;
- }
-
- gtPointer = GetGTAddr();
- *gtPointer = gpb.gtData;
-
- (void) ShowInitIcon( 128, -1);
- }
-
- void NotificationTrash(WindowPeek wp)
- {
- GestaltTalkPB gpb;
- gtp gdata;
- short err = 0;
- FontInfo fi;
- Rect drawRect;
- short lineHt;
-
- gdata = *GetGTAddr();
-
- if(gdata->buffCount)
- if( EqualString("\pTrash", *(wp->titleHandle), false, false) ) {
- GetFontInfo(&fi);
- lineHt = fi.ascent + fi.descent + fi.leading;
-
- drawRect = wp->port.portRect;
-
- drawRect.top += lineHt + 32;
- drawRect.left += 2;
- drawRect.bottom -= 17;
- drawRect.right -= 17;
-
- EraseRect(&drawRect);
-
- drawRect.bottom = drawRect.top + lineHt;
-
- MoveTo(drawRect.left,drawRect.bottom);
- DrawString(gdata->dataBuffer);
- }
-
- }
-
- pascal void EndUpdateEntry(WindowPtr wp)
- {
-
- asm {
- move.l wp,-(sp)
- jsr NotificationTrash
- addq.l #4,sp
-
- @callOriginal
- jsr GetStashSpotAddr // get pointer to real NMinstall address
- movea.l d0,a0 // get pointer to storage
- move.l (a0),a0 // save addr of NMInstall
- unlk a6
- jmp (a0) // push address of real NMInstall on stack
- // let the RTS take us there...
- }
- }
-
-
- long *GetStashSpotAddr()
- {
- asm {
- bsr.s @skipStorage
- dc.l 0x00 // pointer to real EndUpdate
- dc.l 0x00 // gestaltTalk gtData
- @skipStorage:
- move.l (sp)+,d0
- }
- }
-
- gtp *GetGTAddr()
- {
- asm {
- bsr.s @skipStorage
- dc.l 0x00 // gestaltTalk gtData
- dc.l 0x00
- @skipStorage:
- move.l (sp)+,d0
- }
- }
-
-